route.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import { NextRequest, NextResponse } from "next/server";
  2. import { PrismaClient } from "@prisma/client";
  3. const prisma = new PrismaClient();
  4. export const GET = async (
  5. req: NextRequest,
  6. { params }: { params: Promise<{ id: string }> }
  7. ) => {
  8. const { id } = await params;
  9. try {
  10. const file = await prisma.file.findUnique({
  11. where: { id },
  12. });
  13. if (!file) {
  14. const response = NextResponse.json(
  15. { error: "File not found" },
  16. { status: 404 }
  17. );
  18. response.headers.set('Access-Control-Allow-Origin', '*');
  19. return response;
  20. }
  21. // Return file as downloadable response
  22. const response = new NextResponse(file.data, {
  23. headers: {
  24. "Content-Type": file.mimetype,
  25. "Content-Disposition": `attachment; filename="${file.filename}"`,
  26. "Content-Length": file.size.toString(),
  27. "Access-Control-Allow-Origin": "*",
  28. },
  29. });
  30. return response;
  31. } catch (error) {
  32. console.error("Error retrieving file:", error);
  33. const response = NextResponse.json(
  34. { error: "Failed to retrieve file" },
  35. { status: 500 }
  36. );
  37. response.headers.set('Access-Control-Allow-Origin', '*');
  38. return response;
  39. } finally {
  40. await prisma.$disconnect();
  41. }
  42. };
  43. export const OPTIONS = async () => {
  44. const response = new NextResponse(null, { status: 200 });
  45. response.headers.set('Access-Control-Allow-Origin', '*');
  46. response.headers.set('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS');
  47. response.headers.set('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  48. return response;
  49. };